import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

import java.util.Arrays;
import java.util.Random;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 牛孟俊
 * Date: 2023-10-21
 * Time: 14:27
 */
public class TestSort {

    /**
     * Random 是用来生成随机数的
     * */
    public static void testInsertSort(int[] array) {

        array = Arrays.copyOf(array,array.length);//现在我们排序不会对原来所指的对象进行改变

        long starTime = System.currentTimeMillis();//返回的是毫秒
        //Sort.shellSort(array);
        long endTime = System.currentTimeMillis();
        System.out.println("希尔排序耗费时间" + (endTime - starTime));
    }

    public static void testshellSort(int[] array) {

        array = Arrays.copyOf(array,array.length);//现在我们排序不会对原来所指的对象进行改变

        long starTime = System.currentTimeMillis();//返回的是毫秒
        Sort.insertSort(array);
        long endTime = System.currentTimeMillis();
        System.out.println("插入排序耗费时间" + (endTime - starTime));
    }

    public static void testSelectSort(int[] array) {

        array = Arrays.copyOf(array,array.length);//现在我们排序不会对原来所指的对象进行改变

        long starTime = System.currentTimeMillis();//返回的是毫秒
        Sort.selectSort(array);
        long endTime = System.currentTimeMillis();
        System.out.println("选择排序耗费时间" + (endTime - starTime));
    }
    public static void Sort(int[] array) {

        array = Arrays.copyOf(array,array.length);//现在我们排序不会对原来所指的对象进行改变

        long starTime = System.currentTimeMillis();//返回的是毫秒
        Sort.selectSort(array);
        long endTime = System.currentTimeMillis();
        System.out.println("选择排序耗费时间" + (endTime - starTime));
    }

    public static void testquickSortNoR(int[] array) {
        array = Arrays.copyOf(array,array.length);//现在我们排序不会对原来所指的对象进行改变

        long starTime = System.currentTimeMillis();//返回的是毫秒
        Sort.quickSortNonR(array);
        long endTime = System.currentTimeMillis();
        System.out.println("非递归快速排序排序耗费时间" + (endTime - starTime));
    }

    public static void testquickSort(int[] array) {
        array = Arrays.copyOf(array,array.length);//现在我们排序不会对原来所指的对象进行改变

        long starTime = System.currentTimeMillis();//返回的是毫秒
        Sort.quickSort(array);
        long endTime = System.currentTimeMillis();
        System.out.println("快速排序排序耗费时间" + (endTime - starTime));
    }
    //数组中的值是一个乱序的
    public static void notOrderArray(int[] array) {
        Random random = new Random();
        for(int i = 0; i < array.length; i++) {
            array[i] = random.nextInt(10_0000);
        }

    }
    public static void orderArray(int array[]) {
        for(int i = 0; i < array.length; i++) {
            //array[i] = i;
            array[i] =array.length - i;
        }
    }


    public static void main(String[] args) {
        int[] array = new int[100_0000];
        orderArray(array);
        //notOrderArray(array);
        /*testInsertSort(array);
        testshellSort(array);
        testSelectSort(array);

        testquickSortNoR(array);*/

        testquickSort(array);
        System.out.println("递归的次数" + Sort.count);
    }
}
